#include "Mapa.h"
#include <stdio.h>

GView::GView(QWidget *parent) : QGraphicsView(parent) {
    Escena = new QGraphicsScene(this);
    Escena->setSceneRect(0,0,800,409);
    setScene(Escena);
    setBackgroundBrush(QPixmap("images/mapa.png"));
    setRenderHint(QPainter::Antialiasing);
    setCacheMode(QGraphicsView::CacheBackground);
    QPixmap pic = QPixmap("images/mapa_mascara.png");
    Mascara = pic.toImage();
    for (int i=0; i < 42; i++) crearIndicador(i);
}

void GView::crearIndicador(int index){
    indicadores[index] = new Indicador(posIndicadores[index][0],posIndicadores[index][1]);
    Escena->addItem(indicadores[index]);
}

void GView::asignarIndicador(int index, QColor color, int tropas){
    indicadores[index]->setColor(color);
    indicadores[index]->setText(tropas);
}

void GView::actualizarIndicador(int index, int tropas){
    indicadores[index]->setText(tropas);
}

void GView::mouseReleaseEvent(QMouseEvent *event){
    int x = event->pos().x();
    int y = event->pos().y();
    QColor color = QColor(Mascara.pixel(x,y));
    //printf ("Territorio:%i -> x:%i - y:%i\n", color.red(), x, y);
    emit mouseReleased(color.red());
}

Indicador::Indicador(int x0, int y0){
    x=x0;
    y=y0;
    radio=10;
    texto="0";
    color.setRgb(255,255,255,255);
    setPos(x0, y0);
}

void Indicador::setText(int tropas){
    /*QString t;
    t.setNum(tropas);
    texto = t;*/
    texto.setNum(tropas);
    update();
}

void Indicador::setColor(QColor c){
    color = c;
    update();
}


QRectF Indicador::boundingRect() const{
    return QRectF(-radio,-radio,2*radio,2*radio);
}

QPainterPath Indicador::shape() const{
    QPainterPath path;
    path.addEllipse(-radio,-radio,2*radio,2*radio);
    return path;
}

void Indicador::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/,
        QWidget */*widget*/){
    int Desp;
    painter->setBrush(color);
    painter->setPen(Qt::black);
    painter->drawEllipse(-radio,-radio,2*radio,2*radio);

    if (texto.length()==1)
        Desp = -4;
    else if (texto.length()==2)
        Desp = -7;
    else 
        Desp = -10;
    painter->drawText(Desp,4,texto);
}
